<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!--
  Licensed to the Apache Software Foundation (ASF) under one
  or more contributor license agreements.  See the NOTICE file
  distributed with this work for additional information
  regarding copyright ownership.  The ASF licenses this file
  to you under the Apache License, Version 2.0 (the
  "License"); you may not use this file except in compliance
  with the License.  You may obtain a copy of the License at

  https://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing,
  software distributed under the License is distributed on an
  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  KIND, either express or implied.  See the License for the
  specific language governing permissions and limitations
  under the License.
-->

<HTML>
<HEAD>
  <TITLE>LDAP Model schema package</TITLE>
</HEAD>

<BODY LANG="en-US" DIR="LTR">
<P>
Contains interfaces and base classes for representing the LDAP schema domain
model.  We model the following LDAP schema objects:
</P>

<ul>
  <li>attributeTypes</li>
  <li>dITContentRules</li>
  <li>dItStructureRules</li>
  <li>matchingRules</li>
  <li>matchingRuleUses</li>
  <li>nameForms</li>
  <li>objectClasses</li>
  <li>syntaxes</li>
</ul>

<p>
An interface is defined for each type of schema object.  All these interfaces
extend from a common root interface: SchemaObject.  Other interfaces have been
added to associate some useful behavoir with these objects.  These interfaces
are listed below:
</p>

<ul>
  <li>Normalizer</li>
  <li>Comparator [from SDK]</li>
  <li>SyntaxChecker</li>
</ul>

<p>
These interfaces are primitive constructs that help define what some schema
objects like a syntax or a matchingRule is in terms of use.  Namely these
constructs determine how schema objects are applied.  For example a syntax exists
not only as an OID to be implemented internally by some directory server.  It
exists to constrain the values of attributes which are associated with the
syntax.  This function is defined by the SyntaxChecker interface.  All syntaxes
have a value checker that can apply the syntax to the value to determine if the
value is accepted by the syntax.  A SyntaxChecker is nothing but a lexical
pattern matcher like a regular expression.
</p>

<p>
Normalizers and Comparators play an important role in controlling matching and
hence giving meaning to matchingRules.  They respectively define how values are
to be reduced to a canonical form and how they are to be compared to match
filter assertions to values while conducting a search.  This is a very important
aspect of the directory and unfortunately it is the least understood.  These
two interfaces give tangible meaning to what a matchingRule is about making a
matchingRule definition more than just an OID tag or place holder but something
that can be used.
</p>

<p>
The extra interfaces above are not SchemaObjects although they play a critical
role in defining how schema objects are applied.  SchemaObjects are those that
you actually get back from a directory server and are part of the protocol.
Within a server environment the relevant schema objects will have valid
SyntaxCheckers, Normalizers and Comparators.  However outside of the this
environment these properties MAY be undefined.   We hope to make it defined
on the client side as well if desired.
</p>


<p>
  Here's what the OID of each element means according to [<a href=
  "http://www.ietf.org/internet-drafts/draft-ietf-ldapbis-models-11.txt">MODELS
  </a>]:
</p>

<table>
  <tr><th>Schema Description</th><th>Numericoid Description</th></tr>
  <tr><td>ObjectClass</td>
    <td>numericoid is object identifier assigned to this object class;</td>
  </tr>
  <tr><td>AttributeType</td>
    <td>numericoid is object identifier assigned to this attribute type;</td>
  </tr>
  <tr><td>MatchingRule</td>
    <td>numericoid is object identifier assigned to this matching rule;</td>
  </tr>
  <tr><td>MatchingRuleUse</td>
    <td>numericoid is the object identifier of the matching rule associated
      with this matching rule use description; matching rule uses are [0-1]:[1]
      cardinality with their respective matchingRule.
    </td>
  </tr>
  <tr><td>Syntax</td>
    <td>numericoid is object identifier assigned to this LDAP syntax;</td>
  </tr>
  <tr><td>DitContentRule</td>
    <td>numericoid is the object identifier of the structural object class
      associated with this DIT content rule;
    </td>
  </tr>
  <tr><td>DitStructureRule</td>
    <td>this now something very special and needs further investigation</td>
  </tr>
  <tr><td>NameForm</td>
    <td>numericoid is object identifier which identifies this name form;</td>
  </tr>
</table>

</BODY>
</HTML>
